/*
 * 
 * Copyright 2011 visual-analysis-of-cancer.
 * This file is part of visual-analysis-of-cancer.
 * 
 * visual-analysis-of-cancer is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * visual-analysis-of-cancer is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with kOSMik.  If not, see <http://www.gnu.org/licenses/>.
 *  
 * visual-analysis-of-cancer:
 * An tool to analye the WHO and GLOBOCAN cancer data.
 * http://code.google.com/p/visual-analysis-of-cancer/
 * 
 * 
 * 
 * Authors: Erik Sniegula, Johannes Dahlke
 * 
 * Module:  Programming in Processing for Visual Analytics
 * Group:   20
 * 
 * Created: Aug. 2011
 * Version: 1.0
 *
 */
 




package de.fuberlin.processing.who.cancer.data;

import java.util.Collection;

import de.fuberlin.processing.who.cancer.data.structs.StructAirPollutionExposureOfLocation;
import de.fuberlin.processing.who.cancer.data.structs.StructCancerAgeSpreadingOfLocation;
import de.fuberlin.processing.who.cancer.data.structs.StructCancerCauseAirPollutionOfLocation;
import de.fuberlin.processing.who.cancer.data.structs.StructCancerCauseUvRadiationOfLocation;
import de.fuberlin.processing.who.cancer.data.structs.StructCancerIncidenceOfLocation;
import de.fuberlin.processing.who.cancer.data.structs.StructCancerMortalityOfLocation;
import de.fuberlin.processing.who.cancer.data.structs.StructCancerSexSpreadingOfLocation;
import de.fuberlin.processing.who.cancer.data.structs.StructHealthFinancingOfLocation;
import de.fuberlin.processing.who.cancer.data.structs.StructLifeExpectancyAndHealthFinancingAndCancerDataForLocation;
import de.fuberlin.processing.who.cancer.data.structs.StructLifeExpectancyOfLocation;
import de.fuberlin.processing.who.cancer.data.structs.StructLocationData;
import de.fuberlin.processing.who.cancer.data.structs.StructUVRadiationExposureOfLocation;
import de.fuberlin.processing.who.cancer.data.structs.Struct_01_LifeExpectancyToHealthFinancing;
import de.fuberlin.processing.who.cancer.data.structs.Struct_02_HealthFinancingToCancerIncidence;
import de.fuberlin.processing.who.cancer.data.structs.Struct_03_LifeExpectancyToCancerIncidence;
import de.fuberlin.processing.who.cancer.data.structs.Struct_04_CancerIncidenceToCancerMortality;
import de.fuberlin.processing.who.cancer.data.structs.Struct_05_HealthFinancingToCancerMortality;
import de.fuberlin.processing.who.cancer.data.structs.StructLocationName;
import de.fuberlin.processing.who.cancer.data.structs.StructRegionName;
import de.fuberlin.processing.who.cancer.data.structs.StructSubregionDescription;
import de.fuberlin.processing.who.cancer.data.structs.Struct_06_LifeExpectancyToCancerMortality;
import de.fuberlin.processing.who.cancer.data.structs.Struct_07_CancerMortalityToAirPollution;
import de.fuberlin.processing.who.cancer.data.structs.Struct_08_CancerIncidenceToAirPollution;
import de.fuberlin.processing.who.cancer.data.structs.Struct_09_HealthFinancingToAirPollution;
import de.fuberlin.processing.who.cancer.data.structs.Struct_10_LifeExpectancyToAirPollution;
import de.fuberlin.processing.who.cancer.data.structs.Struct_11_CancerMortalityToUvRadiation;
import de.fuberlin.processing.who.cancer.data.structs.Struct_12_CancerIncidenceToUvRadiation;
import de.fuberlin.processing.who.cancer.data.structs.Struct_13_HealthFinancingToUvRadiation;
import de.fuberlin.processing.who.cancer.data.structs.Struct_14_LifeExpectancyToUvRadiation;
import de.fuberlin.processing.who.cancer.data.structs.Struct_15_CancerMortalityToAge;
import de.fuberlin.processing.who.cancer.data.structs.Struct_16_CancerIncidenceToAge;


public interface DatabaseConnector {

	/**
	 * getLifeExpectancyByHealthFinancing liefert eine Tabelle über die
	 * Lebenserwartung in Jahren in Abhängikeit der Ausgaben für das
	 * Gesundheitssystem in USD.
	 * 
	 * @return Eine Kollektion der Struct_01_LifeExpectancyToHealthFinancing-Struktur
	 */
	Collection<Struct_01_LifeExpectancyToHealthFinancing> getLifeExpectancyByHealthFinancing();
	
	/**
	 * getHealthFinancingToCancerIncidence liefert eine Tabelle über die
	 * Krebserkrankungen in Abhängikeit der Ausgaben für das
	 * Gesundheitssystem in USD.
	 * 
	 * @return Eine Kollektion der Struct_02_HealthFinancingToCancerIncidence-Struktur
	 */	
	Collection<Struct_02_HealthFinancingToCancerIncidence> getHealthFinancingToCancerIncidence();

	/**
	 * getLifeExpectancyToCancerIncidence liefert eine Tabelle über die
	 * Krebs-Sterberate in Bezug zur Lebenserwartung.
	 * 
	 * @return Eine Kollektion der Struct_03_LifeExpectancyToCancerIncidence-Struktur
	 */		
	Collection<Struct_03_LifeExpectancyToCancerIncidence> getLifeExpectancyToCancerIncidence();

	/**
	 * getCancerIncidenceToCancerMortality liefert eine Tabelle über die
	 * Krebserkrankungen in Bezug zur Krebs-Sterberate.
	 * 
	 * @return Eine Kollektion der Struct_04_CancerIncidenceToCancerMortality-Struktur
	 */			
	Collection<Struct_04_CancerIncidenceToCancerMortality> getCancerIncidenceToCancerMortality();
	

	
	/**
	 * getCancerMortalityToHealthFinancing liefert eine Tabelle über registrierte
	 * Krebstote in Bezug zu den Ausgaben für das Gesundheitssystem in
	 * USD.
	 * 
	 * Wertebereiche:
	 * - ASR (age-standardised rate): pro 100.000
	 * - Crude rate: per 100,000 persons at risk. 
	 * 
	 * @return Eine Kollektion der StructCancerDeathToHealthFinancing-Struktur
	 */
	Collection<Struct_05_HealthFinancingToCancerMortality> getCancerMortalityToHealthFinancing();


	/**
	 * getCancerDeathToLifeExpectancy liefert eine Tabelle über registrierte
	 * Krebstote pro 1000 in Bezug zu der Lebenserwartung in Jahren.
	 * 
	 * @return Eine Kollektion der StructCancerDeathToHealthFinancing-Struktur
	 */
	Collection<Struct_06_LifeExpectancyToCancerMortality> getCancerMortalityToLifeExpectancy();

	
	
	Collection<Struct_07_CancerMortalityToAirPollution> getCancerMortalityToAirPollution();
	
	
	Collection<Struct_08_CancerIncidenceToAirPollution> getCancerIncidenceToAirPollution();
	
	
	Collection<Struct_09_HealthFinancingToAirPollution> getHealthFinancingToAirPollution();
	
	
	Collection<Struct_10_LifeExpectancyToAirPollution> getLifeExpectancyToAirPollution();
	
	
	Collection<Struct_11_CancerMortalityToUvRadiation> getCancerMortalityToUvRadiation();
	
	
	Collection<Struct_12_CancerIncidenceToUvRadiation> getCancerIncidenceToUvRadiation();
	
	
	Collection<Struct_13_HealthFinancingToUvRadiation> getHealthFinancingToUvRadiation();
	
	
	Collection<Struct_14_LifeExpectancyToUvRadiation> getLifeExpectancyToUvRadiation();
	
	
	Collection<Struct_15_CancerMortalityToAge> getCancerMortalityToAge();
	
	
	Collection<Struct_16_CancerIncidenceToAge> getCancerIncidenceToAge();
	
	
	/**
	 * getLocationNames liefert eine Tabelle über alle Locations (Länder) die in
	 * der Datenbank registriert sind.
	 * 
	 * @return Eine Kollektion der StructLocationName-Struktur
	 */
	Collection<StructLocationName> getLocationNames();


	/**
	 * getRegionNames liefert eine Tabelle mit allen WHO-Regionen.
	 * 
	 * @return Eine Kollektion der StructRegionName-Struktur
	 */
	Collection<StructRegionName> getRegionNames();


	/**
	 * getSubregionDescriptions liefert eine Tabelle mit der Kategorie sowie
	 * Beschreibung der WHO-Subregionen
	 * 
	 * @return Eine Kollektion der StructSubregionDescription-Struktur
	 */
	Collection<StructSubregionDescription> getSubregionDescriptions();


	/**
	 * getLocationsOfRegionFilteredBySubregions liefert alle Locations, die zu
	 * einer WHO-Region gehören.
	 * 
	 * @param regionId
	 *          gibt die WHO Region, zu der die Locations zurückgegeben werden.
	 * 
	 * @return Eine Kollektion mit den Location Id's
	 */
	Collection<Integer> getLocationsOfRegion( int regionId);


	/**
	 * getLocationsOfRegionFilteredBySubregions liefert alle Locations, die zu den
	 * WHO-Subregionen einer WHO-Region gehören.
	 * 
	 * @param regionId
	 *          gibt die WHO Region an, zu der die Locations zurückgegeben werden.
	 * @param selectedSubregions
	 *          filtert die Locations der Region noch weiter nach WHO Subregionen
	 * @return Eine Kollektion mit den Location Id's
	 */
	Collection<Integer> getLocationsOfRegionFilteredBySubregions( int regionId,
			Collection<Character> selectedSubregions);


	/**
	 * getRegionsOfLocations liefert alle WHO-Regionen denen eines der Locations
	 * aus der übergebenen Location-Kollektion zugeordnet ist.
	 * 
	 * @param locations
	 *          gibt die WHO Locations an, zu der die WHO-Regionen zurückgegeben
	 *          werden sollen.
	 * 
	 * @return Eine Kollektion mit den Region-Id's
	 */
	Collection<Integer> getRegionsOfLocations( Collection<Integer> locations);


	/**
	 * getSubregionsOfLocations liefert alle WHO-Subregionen denen eines der
	 * Locations aus der übergebenen Location-Kollektion zugeordnet ist.
	 * 
	 * @param locations
	 *          gibt die WHO Locations an, zu der die WHO-SubRegionen
	 *          zurückgegeben werden sollen.
	 * 
	 * @return Eine Kollektion mit den Subregion-Id's
	 */
	Collection<Character> getSubregionsOfLocations( Collection<Integer> locations);


	/**
	 * getMaxLifeExpenctancy ermittelt den größten Wert für die Lebenserwartung.
	 *  
	 * @return die größte Lebenserwartung als Integer
	 */
	Integer getMaxLifeExpenctancy();


	/**
	 * getMaxHealthFinancing ermittelt die höchsten Ausgaben für das Gesundheitssystem.
	 * 
	 * @return die höchsten Gesundheitsausgaben als Float.
	 */
	Float getMaxHealthFinancing();
	
	/**
	 * getLifeExpectancyAndHealthFinancingAndCancerDataForLocation liefert die Location Id, den Location Namen, Daten über Health Financing und Life Expectancy sowie relevante Krebsdaten.
	 * 
	 * @param die id der location 
	 * 
	 * @see HealthGraph
	 */
	StructLifeExpectancyAndHealthFinancingAndCancerDataForLocation getLifeExpectancyAndHealthFinancingAndCancerDataForLocation ( int locationId);
	
	/**
	 * getPollutionOfLocation liefert die Luftverschmutzung für die angegebene Location
	 * 
	 * @param die id der location 
	 * 
	 * @see HealthGraph
	 */
	StructAirPollutionExposureOfLocation getAirPollutionExposureOfLocation( int locationId);

	/**
	 * getMaxAirPollutionExposure ermittelt den höchsten Wert an gemessener Luftverschmutzung.
	 * 
	 * @return die höchste Luftverschmutzung.
	 */
	Integer getMaxAirPollutionExposure();
	
	/**
	 * getUVRadiationExposureOfLocation liefert die UV-Strahlenbelastung für die angegebene Location
	 * 
	 * @param die id der location 
	 * 
	 * @see HealthGraph
	 */
	StructUVRadiationExposureOfLocation getUVRadiationExposureOfLocation( int locationId);

	/**
	 * getMaxUVRadiationExposure ermittelt den höchsten Wert an gemessener UV-Strahlung.
	 * 
	 * @return die höchste UV-Strahlung.
	 */
	Integer getMaxUVRadiationExposure();

	/**
	 * getCancerIncidenceAgeSpreatingOfLocation liefert die Verteilung der Krebserkrankungen bezüglich der Alterklassen.
	 *   
	 * @param locationId die Id der Location, von der die Altersverteilung der Krebserkrankungen geliefert werden soll.
	 *
	 * @return eine StructCancerAgeSpreadingOfLocation-Struktur mit den Daten über die Altersverteilung.
	 */
	StructCancerAgeSpreadingOfLocation getCancerIncidenceAgeSpreatingOfLocation(
			int locationId);

	/**
	 * getCancerIncidenceAgeSpreatingOfLocation liefert die Verteilung der Krebs-Sterberate bezüglich der Alterklassen.
	 *   
	 * @param locationId die Id der Location, von der die Altersverteilung der Krebs-Sterberate geliefert werden soll.
	 *
	 * @return eine StructCancerAgeSpreadingOfLocation-Struktur mit den Daten über die Altersverteilung.
	 */
	StructCancerAgeSpreadingOfLocation getCancerMortalityAgeSpreatingOfLocation(
			int locationId);
		
	/**
	 * getCancerIncidenceSexSpreatingOfLocation liefert die Verteilung der Krebserkrankungen bezüglich des Geschlechtes.
	 *   
	 * @param locationId die Id der Location, von der die geschlechtsspezifische Verteilung der Krebserkrankungen geliefert werden soll.
	 *
	 * @return eine StructCancerAgeSpreadingOfLocation-Struktur mit den Daten über die Verteilung der Erkrankung bzgl. des Geschlechtes.
	 */
	StructCancerSexSpreadingOfLocation getCancerIncidenceSexSpreatingOfLocation(
			int locationId);

	/**
	 * getCancerMortalitySexSpreatingOfLocation liefert die Verteilung der Krebs-Sterberate  bezüglich des Geschlechtes.
	 *   
	 * @param locationId die Id der Location, von der die geschlechtsspezifische Verteilung der Krebs-Sterberate geliefert werden soll.
	 *
	 * @return eine StructCancerAgeSpreadingOfLocation-Struktur mit den Daten über die Krebs-Sterberate bzgl. des Geschlechtes.
	 */
	StructCancerSexSpreadingOfLocation getCancerMortalitySexSpreatingOfLocation(
			int locationId);

	
	StructLocationData getLocationDataByLocationId( int locationId);
	
	
	Collection<StructCancerMortalityOfLocation> getCancerMortalityOfLocations( Collection<Integer> locations);
	
	Collection<StructCancerIncidenceOfLocation> getCancerIncidenceOfLocations( Collection<Integer> locations);

	Collection<StructLifeExpectancyOfLocation> getLifeExpectancyOfLocations(
			Collection<Integer> locations);

	Collection<StructHealthFinancingOfLocation> getHealthFinancingOfLocations(
			Collection<Integer> locations);

	Collection<StructCancerCauseAirPollutionOfLocation> getCancerCauseAirPollutionOfLocations(
			Collection<Integer> locations);

	Collection<StructCancerCauseUvRadiationOfLocation> getCancerCauseUvRadiationOfLocations(
			Collection<Integer> locations);

	Collection<StructCancerAgeSpreadingOfLocation> getCancerIncidenceAgeSpreatingOfLocations(
			Collection<Integer> locations);

	Collection<StructCancerAgeSpreadingOfLocation> getCancerMortalityAgeSpreatingOfLocations(
			Collection<Integer> locations);
	
	/**
	 * Löst die Datenbankverbindung auf.
	 */
	void disconnect();







}
